package com.shujia.scala

object Demo6Class {
  def main(args: Array[String]): Unit = {

    //创建对象
    val student = new Student("001", "张三", 23)

    println(student)

    student.setId("002")

    println(student)

  }
}

/**
  * 类中可以定义属性，方法，构造函数，还可以继承父类，实现接口
  *
  */
class Student(id: String, name: String) {

  println("默认构造函数")
  /**
    * 定义类的属性
    *
    * private: 私有化
    *
    */
  private var _id: String = id

  val _name: String = name

  /**
    * _ 占位符，相当于给变量一个默认值
    *
    */

  var _age: Int = _


  /**
    * 重载构造函数
    */
  def this(id: String, name: String, age: Int) {
    //在重载构造函数的第一行需要先调用默认构造函数
    this(id, name)

    println("重载构造函数")

    this._age = age
  }


  /*  override def toString(): String = {
      return s"Student($_id, $_name, $_age)"
    }*/

  /**
    * scala中函数的省略
    * 1、如果函数没有参数，()  可以省略
    * 2、返回值类型可以不写，会自动推断
    * 2、如果函数最后一行作为返回值，return可以省略
    * 4、如果函数中代码只有一行 {} 可以省略
    *
    */

  //重写父类的方法
  override def toString = s"Student(${_id}, ${_name}, ${_age})"


  /**
    * get set 方法
    *
    */

  def getId: String = this._id

  def setId(id: String): Unit = {
    this._id = id
  }


}
